package com.pdd.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

/**
 * 数据传输对象。
 * API中的所有Controller控制器，统一返回这个格式的JSON数据。
 *
 * 全局Code：
 *      1000 操作成功
 *      2000 操作失败
 * @param <T> 数据类型，默认Object。
 */
@Getter
@Setter
@ApiModel(value = "数据传输对象 DTO")
public class DTO<T> {
    @ApiModelProperty(value = "状态码")
    private int code;

    @ApiModelProperty(value = "返回消息")
    private String msg;

    @ApiModelProperty(value = "返回数据")
    private T data;

    public DTO(){}
    public DTO(T data){
        this(1000, "操作完成", data);
    }
    public DTO(int code, T data){
        this(code, "操作完成", data);
    }
    public DTO(int code, String msg){
        this(code, msg, null);
    }
    public DTO(int code, String msg, T data){
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 返回用于表示操作成功的DTO。
     * @return DTO对象。
     */
    public static DTO success(){
        DTO dto = new DTO();
        dto.code = 1000;
        dto.msg = "操作成功";
        return dto;
    }

    /**
     * 返回用于表示操作成功的DTO。
     * @return DTO对象。
     */
    public static DTO error(){
        DTO dto = new DTO();
        dto.code = 2000;
        dto.msg = "操作失败";
        return dto;
    }
}
